package ejemplo.sistemas;

import java.util.ArrayList;

import ejemplo.componentes.interfaces.IMovil;
import es.componentes.Componente;
import es.subsistemas.Subsistema;
/**
 * Subsistema de movimiento. Se encarga de procesar los componentes de movimiento.
 * @author Miguel Vicente
 */
public class SubsistemaMovimiento implements Subsistema {
	
	private ArrayList<IMovil> componentesMoviles;
	
	/**
	 * Constructor.
	 * @param componentes ArrayList de componentes a mover.
	 */
	public SubsistemaMovimiento(ArrayList<Componente> componentes) {
		this.componentesMoviles = castComponentesIMovil(componentes);
	}
	
	@Override
	public String getTipo() {
		return IMovil.ID_INTERFAZ;
	}
	
	@Override
	public void procesar(double delta) {
		for (IMovil componenteMovil : componentesMoviles) {
			procesarComponente(componenteMovil, delta);
		}		
	}
	/**
	 * Procesa un componente.<br>
	 * @param componente IMovil
	 * @param delta Tiempo transcurrido desde la ultima actualizacion
	 */
	public void procesarComponente(IMovil componente, double delta) {
		/*componente.moverX(delta);
		componente.moverY(delta);*/
		componente.mover(delta);
	}
	/**
	 * Castea un {@code ArrayList<Componente>} a {@code ArrayList<IMovil>}
	 * @param componentes {@code ArrayList<Componente>}
	 * @return {@code ArrayList<IMovil>}
	 */
	private ArrayList<IMovil> castComponentesIMovil(ArrayList<Componente> componentes) {
		ArrayList<IMovil> iMoviles = new ArrayList<IMovil>();
		for (Componente componente : componentes) {
			if(componente.getTipo().equals(getTipo()))
				iMoviles.add((IMovil) componente);
				
			
		}
		return iMoviles;
	}

}
